Software developers can develop software by writing source code in one or more programming languages. Some software development platforms compile the source code into an intermediate language (IL) instead of platform or processor-specific object code. This IL code is then executed in any environment that supports the particular runtime framework for that platform. A just-in-time (JIT) compilation process is used to turn the byte-code into code immediately executable by the CPU. The conversion can be performed gradually during the program's execution. JIT compilation provides environment-specific optimization, runtime type safety, and component verification. Examples of platforms that use such IL and JIT techniques include the MICROSOFT® .NET Framework, Java Virtual Machine, and others. Applications that run on such platforms that use IL and JIT compilation are typically called “managed applications”.
There are various ways to test and/or debug a software application that is in development in these JIT environments, and in other environments for that matter. As a few examples, a debugger application can be used to step through a specific code path to trace a specific problem, an automated test tool can be used to run the software application with some pre-defined parameters and then log the results, and a human tester can personally go through a series of test cases to ensure an expected outcome is achieved. One problem with these testing approaches is that they are limited to the creativity of the user who debugged the program, created the automated test script, or interactively tested the application.